using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson22 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 用多包策略还是大包策略？
        //1.AB包太多(太小)的问题
        //  1-1:每个包都会有内存开销，如果加载过多的包可能会带来更多的内存消耗
        //  1-2:并发下载的问题，如果包小而多，以为着下载包时可能需要更多的时间
        //  1-3:目录文件会因为过多的包而变大，因为它要记录更多的包信息
        //  1-4:复用资源的可能性更大，比如多个包使用同样一个资源，但是该资源不是寻址资源，那么在每个包中都会有该资源

        //2.AB包太少(太大)的问题
        //  1-1:过大的包如果下载失败，下次会重新下载，因为使用UnityWebRequest下载包时不会恢复失败的下载
        //      比如100MB的包，下了50MB，玩家中断下载了，下次又得重新下
        //  1-2:能单独加载，但是不能单独卸载，更大的包意味着包中有更多资源，比如加载了1个大包中100个资源
        //      但是现在用完了99个，还剩一个再用，即使99都卸载了，但是由于引用计数这个大包也不会卸载
        //      就会造成内存的浪费

        //所以没有最好的策略，只有根据自己的项目需求合理安排分组打包
        //要根据资源的使用情况来合理设置资源分组，在分组时权衡好各方面的问题
        #endregion

        #region 知识点二 哪种压缩方式更好？
        //AB包的压缩方式：不压缩、LZ4、LZMA
        //一般情况LZ4用于本地资源，LZMA用于远端资源
        //主要原因是LZMA的压缩内容更小，更节约下载时间和流量
        //注意：压缩不会影响加载内存的大小，只会影响包体大小，下载时间等

        //但是也要根据实际情况
        //比如：
        //1.不压缩：包体并不大的单机游戏，使用不压缩最好，没有包体大小的压力，加载也是最快的，因为不用解压
        //2.LZ4：它是基于块的压缩，所以提供了加载文件的能力，加载资源时不用全加载AB包，只加载使用的内容，相对LZMA来说更节约内存
        //3.LZMA：不建议用它在本地内容中，因为它虽然包最小，但是加载最慢，用它只是为了节约下载时间和极限压缩包体大小

        //综合来说，也没有最优的方式，还是要根据实际情况来选择
        //个人认为LZ4压缩方式，是相对比较优秀的一种方式
        #endregion

        #region 知识点三 减小目录文件大小
        //当我们想要极限压缩包体大小时，可能希望优化目录文件的大小
        //1.压缩本地目录
        //  AddressableAssetSettings > Catalog > Compress Local Catalog
        //2.禁用内置场景和资源
        //  默认Addressables提供了从Resources等内置资源文件夹中加载资源以及加载内置场景
        //  如果你不通过Addressables加载他们，可以禁用，这样目录文件就不会包含其中信息
        //  但是我们就只能使用老方法加载同名
        //  个人建议取消，因为一般我们不会通过Addressables去加载非寻址资源
        #endregion

        #region 知识点四 注意事项
        //1.关于AB包最大的限制，老版本不支持大于4G的包，虽然新版本中已经没有这个限制
        //但是为了兼容性，还是建议大小控制在4G以下

        //2.活用可寻址资源上的Groups View中的两个功能
        //Show Sprite and Subobject Addresses:当窗口中内容特别多时，禁用它可以提升窗口加载的性能
        //Group Hierarchy with Dashes：启用带破折号的层级结构
        //                             可以让我们在内容特别多时以层级结构查看分组信息
        #endregion
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
